From df817bd118cf3f51b154564a22fdeb91ba8120e9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timm=20B=C3=A4der?= Date: Wed, 5 Dec 2018 10:36:43 +0100 Subject: [PATCH] gl renderer: Ignore viewport ops to the same viewport --- gsk/gl/gskglrenderops.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/gsk/gl/gskglrenderops.c b/gsk/gl/gskglrenderops.c index ace761790c..dc85c2e8f5 100644 --- a/gsk/gl/gskglrenderops.c +++ b/gsk/gl/gskglrenderops.c @@ -1,5 +1,12 @@ #include "gskglrenderopsprivate.h" +static inline gboolean +rect_equal (const graphene_rect_t *a, + const graphene_rect_t *b) +{ + return memcmp (a, b, sizeof (graphene_rect_t)) == 0; +} + void ops_finish (RenderOpBuilder *builder) { @@ -188,8 +195,8 @@ ops_set_program (RenderOpBuilder *builder, program_state->modelview = *builder->current_modelview; } - if (memcmp (&empty_rect, &program_state->viewport, sizeof (graphene_rect_t)) == 0 || - memcmp (&builder->current_viewport, &program_state->viewport, sizeof (graphene_rect_t)) != 0) + if (rect_equal (&empty_rect, &program_state->viewport) || + !rect_equal (&builder->current_viewport, &program_state->viewport)) { op.op = OP_CHANGE_VIEWPORT; op.viewport = builder->current_viewport; @@ -376,6 +383,10 @@ ops_set_viewport (RenderOpBuilder *builder, RenderOp op; graphene_rect_t prev_viewport; + if (builder->current_program_state != NULL && + rect_equal (&builder->current_program_state->viewport, viewport)) + return builder->current_program_state->viewport; + op.op = OP_CHANGE_VIEWPORT; op.viewport = *viewport; g_array_append_val (builder->render_ops, op); -- 2.30.2